import java.util.ArrayList;
import java.util.*;

public class AdminSystem {
    private static final String ADMIN_USERNAME = "admin";
    private static String ADMIN_PASSWORD = "ynuinfo#777"; // 初始管理员密码
    private static ArrayList<Customer> customers = new ArrayList<>();
    private static ArrayList<Product> products = new ArrayList<>();
    private static int nextCustomerId = 1;
    private static int nextProductId = 1;

    public static void main(String[] args) {
        // 模拟登录
        login();
        // 主菜单
        showMainMenu();
    }

    // 登录功能
    static void login() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入管理员用户名：");
        String username = scanner.nextLine();
        System.out.println("请输入管理员密码：");
        String password = scanner.nextLine();

        if (username.equals(ADMIN_USERNAME) && password.equals(ADMIN_PASSWORD)) {
            System.out.println("登录成功！");
        }
        else {
            System.out.println("用户名或密码错误，登录失败！");
            System.exit(0); // 登录失败直接退出程序
        }
    }
    // 主菜单显示
    static void showMainMenu() {
        Scanner scanner = new Scanner(System.in);
        int choice;

        do {
            System.out.println("========== 管理员系统主菜单 ==========");
            System.out.println("1. 密码管理");
            System.out.println("2. 客户管理");
            System.out.println("3. 商品管理");
            System.out.println("4. 退出登录");
            System.out.println("====================================");
            System.out.print("请选择操作：");
            choice = scanner.nextInt();
            scanner.nextLine(); // 消耗换行符
            switch (choice) {
                case 1:
                    passwordManagement();
                    break;
                case 2:
                    customerManagement();
                    break;
                case 3:
                    productManagement();
                    break;
                case 4:
                    System.out.println("退出登录成功！");
                    break;
                default:
                    System.out.println("无效的选择，请重新输入！");
            }
        } while (choice != 4);
        scanner.close();
    }
    // 密码管理菜单
    private static void passwordManagement() {
        Scanner scanner = new Scanner(System.in);
        int choice;

        do {
            System.out.println("========== 密码管理菜单 ==========");
            System.out.println("1. 修改管理员密码");
            System.out.println("2. 重置客户密码");
            System.out.println("3. 返回上级菜单");
            System.out.println("=================================");
            System.out.print("请选择操作：");
            choice = scanner.nextInt();
            scanner.nextLine(); // 消耗换行符

            switch (choice) {
                case 1:
                    System.out.println("请输入新的管理员密码：");
                    String newPassword = scanner.nextLine();
                    changeAdminPassword(newPassword);
                    System.out.println("管理员密码修改成功！");
                    break;
                case 2:
                    System.out.println("请输入客户的用户名：");
                    String customerUsername = scanner.nextLine();
                    resetCustomerPassword(customerUsername);
                    break;
                case 3:
                    System.out.println("返回上级菜单！");
                    break;
                default:
                    System.out.println("无效的选择，请重新输入！");
            }
        } while (choice != 3);
    }

    // 修改管理员密码
    private static void changeAdminPassword(String newPassword) {
        ADMIN_PASSWORD = newPassword;
    }

    // 重置客户密码
    private static void resetCustomerPassword(String customerUsername) {
        // 这里只是示例，实际应用中应根据用户名查找客户并重置密码的逻辑
        System.out.println("重置客户密码功能，用户名：" + customerUsername);
    }

    // 客户管理菜单
    private static void customerManagement() {
        Scanner scanner = new Scanner(System.in);
        int choice;
        do {
            System.out.println("========== 客户管理菜单 ==========");
            System.out.println("1. 列出所有客户信息");
            System.out.println("2. 删除客户信息");
            System.out.println("3. 查询客户信息");
            System.out.println("4. 返回上级菜单");
            System.out.println("=================================");
            System.out.print("请选择操作：");
            choice = scanner.nextInt();
            scanner.nextLine(); // 消耗换行符
            switch (choice) {
                case 1:
                    listAllCustomers();
                    break;
                case 2:
                    System.out.println("请输入要删除的客户ID：");
                    int customerId = scanner.nextInt();
                    scanner.nextLine(); // 消耗换行符
                    deleteCustomer(customerId);
                    break;
                case 3:
                    System.out.println("请输入客户ID或用户名进行查询：");
                    String searchCriteria = scanner.nextLine();
                    searchCustomer(searchCriteria);
                    break;
                case 4:
                    System.out.println("返回上级菜单！");
                    break;
                default:
                    System.out.println("无效的选择，请重新输入！");
            }
        } while (choice != 4);
    }

    // 列出所有客户信息
    private static void listAllCustomers() {
        System.out.println("========== 所有客户信息 ==========");
        for (Customer customer : customers) {
            System.out.println(customer.toString());
        }
        System.out.println("=================================");
    }

    // 删除客户信息
    private static void deleteCustomer(int customerId) {
        // 这里只是示例，实际应用中应根据客户ID查找并删除客户的逻辑
        System.out.println("删除客户功能，客户ID：" + customerId);
    }

    // 查询客户信息
    private static void searchCustomer(String searchCriteria) {
        // 这里只是示例，实际应用中应根据搜索条件查找客户的逻辑
        System.out.println("查询客户功能，查询条件：" + searchCriteria);
    }

    // 商品管理菜单
    private static void productManagement() {
        Scanner scanner = new Scanner(System.in);
        int choice;

        do {
            System.out.println("========== 商品管理菜单 ==========");
            System.out.println("1. 列出所有商品信息");
            System.out.println("2. 添加商品信息");
            System.out.println("3. 修改商品信息");
            System.out.println("4. 删除商品信息");
            System.out.println("5. 查询商品信息");
            System.out.println("6. 返回上级菜单");
            System.out.println("=================================");
            System.out.print("请选择操作：");
            choice = scanner.nextInt();
            scanner.nextLine(); // Consume newline left-over

            switch (choice) {
                case 1:
                    // 列出所有商品信息的处理逻辑
                    System.out.println("选择了列出所有商品信息");
                    break;
                case 2:
                    // 添加商品信息的处理逻辑
                    System.out.println("选择了添加商品信息");
                    break;
                case 3:
                    // 修改商品信息的处理逻辑
                    System.out.println("选择了修改商品信息");
                    break;
                case 4:
                    // 删除商品信息的处理逻辑
                    System.out.println("选择了删除商品信息");
                    break;
                case 5:
                    // 查询商品信息的处理逻辑
                    System.out.println("选择了查询商品信息");
                    break;
                case 6:
                    System.out.println("返回上级菜单");
                    break;
                default:
                    System.out.println("无效的选择，请重新选择");
                    break;
            }
        } while (choice != 6); // 选择 6 表示返回上级菜单，退出循环
    }

}


class Customer {
    private String name;
    private String address;
    private String phoneNumber;

    // 构造函数
    public Customer(String name, String address, String phoneNumber) {
        this.name = name;
        this.address = address;
        this.phoneNumber = phoneNumber;
    }

    // 获取客户姓名
    public String getName() {
        return name;
    }

    // 设置客户姓名
    public void setName(String name) {
        this.name = name;
    }

    // 获取客户地址
    public String getAddress() {
        return address;
    }

    // 设置客户地址
    public void setAddress(String address) {
        this.address = address;
    }

    // 获取客户联系方式
    public String getPhoneNumber() {
        return phoneNumber;
    }

    // 设置客户联系方式
    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    // 打印客户信息
    public void printInfo() {
        System.out.println("客户姓名：" + name);
        System.out.println("客户地址：" + address);
        System.out.println("客户联系方式：" + phoneNumber);
    }

    // 客户下单的方法，可以根据具体业务逻辑进行实现
    public void placeOrder() {
        System.out.println(name + " 下单了一笔订单。");
        // 可以添加更多的下单逻辑
    }

    // 客户查询订单的方法，可以根据具体业务逻辑进行实现
    public void viewOrderHistory() {
        System.out.println(name + " 查看了订单历史。");
        // 可以添加更多的订单查询逻辑
    }
}
class Product {
    private String name;
    private double price;
    private int quantityInStock;//库存数量
    public Product(String name, double price) {
        this.name = name;
        this.price = price;
    }
    // 构造函数
    public Product(String name, double price, int quantityInStock) {
        this.name = name;
        this.price = price;
        this.quantityInStock = quantityInStock;
    }

    public Product(String productName) {
    }

    // 获取产品名称
    public String getName() {
        return name;
    }

    // 设置产品名称
    public void setName(String name) {
        this.name = name;
    }

    // 获取产品价格
    public double getPrice() {
        return price;
    }

    // 设置产品价格
    public void setPrice(double price) {
        this.price = price;
    }

    // 获取产品库存量
    public int getQuantityInStock() {
        return quantityInStock;
    }

    // 设置产品库存量
    public void setQuantityInStock(int quantityInStock) {
        this.quantityInStock = quantityInStock;
    }

    // 打印产品信息
    public void printInfo() {
        System.out.println("产品名称：" + name);
        System.out.println("产品价格：" + price + "元");
        System.out.println("库存量：" + quantityInStock);
    }

    // 出售产品的方法，减少库存量
    public void sell(int quantity) {
        if (quantity <= quantityInStock) {
            quantityInStock -= quantity;
            System.out.println(quantity + "件" + name + "已售出。");
        } else {
            System.out.println("库存不足，无法售出 " + quantity + "件" + name + "。");
        }
    }

    // 进货产品的方法，增加库存量
    public void replenish(int quantity) {
        quantityInStock += quantity;
        System.out.println("进货 " + quantity + " 件 " + name + " 完成。");
    }

    public Product getProduct() {
        Product product = new Product(name,price,quantityInStock);
        return product;
    }

}


